﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using EvertonApp.Transporte;

namespace EvertonApp.Data
{
    class TestUsuarioRepository : IRepository<Usuario>
    {
        private static List<Usuario> _usuarios = new List<Usuario> {
                                                    new Usuario {IdUsuario = Guid.NewGuid(), Nombre = "Alfonso", Email = "conejo_alfonso@gmail.com", Password = "45678"},
                                                    new Usuario {IdUsuario = Guid.NewGuid(), Nombre = "Joaquin Reyes", Email = "muchachoReyes@gmail.com", Password = "45678"}, 
                                                    new Usuario {IdUsuario = Guid.NewGuid(), Nombre = "Benzema", Email = "singolBenzema@gmail.com", Password = "45678"}};


        #region Implementation of IRepository<usuario>

        public Usuario Insert(Usuario entity)
        {
            _usuarios.Add(entity);
            entity.IdUsuario = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Usuario entity)
        {
            return _usuarios.Remove(entity);
        }

        public bool Update(Guid id, Usuario entity)
        {
            Usuario user = _usuarios.FirstOrDefault(o => o.IdUsuario == id);
            if (user != null)
            {
                user.IdUsuario = entity.IdUsuario;
                user.Email = entity.Email;
                user.Nombre = entity.Nombre;
                user.Password = entity.Password;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Usuario> SearchFor(Expression<Func<Usuario, bool>> predicate)
        {
            var collection = _usuarios.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Usuario> GetAll()
        {
            return _usuarios.AsQueryable();
        }

        public Usuario GetById(Guid id)
        {
            return _usuarios.Single(o => o.IdUsuario == id);
        }

        #endregion
    }
}
